package main

import "fmt"

// 闭包
func f1(f func()) {
	fmt.Println("this is f1")
	f()
}
func f2(x, y int) {
	fmt.Println("this is f2")
	fmt.Println(x + y)
}

// 定义一个函数对f2进行包装

func f3(f func(int, int), x, y int) func() {
	return func() {
		f(x, y)
	}
}

func main() {
	// f1(f2(1, 2))
	// a := f2(1, 2)
	ref := f3(f2, 10, 20)
	fmt.Printf("%T\n", ref)
	f1(ref)
	// f3(f2(1,2))
}
